Distributed systems today enable a device connected to a communications network to take advantage of services available on other devices located throughout the network. Each device in a distributed system may have its own internal data types, its own address alignment rules, and its own operating system. To enable such heterogeneous devices to communicate and interact successfully, developers of distributed systems can employ a remote procedure call (RPC) communication mechanism.
RPC mechanisms provide communication between processes (e.g., programs, applets, etc.) running on the same machine or different machines. In a simple case, one process, i.e., a client, sends a message to another process, i.e., a server. The server processes the message and, in some cases, returns a response to the client. In many systems, the client and server do not have to be synchronized. That is, the client may transmit the message and then begin a new activity, or the server may buffer the incoming message until the server is ready to process the message.
The Java™ programming language is an object-oriented programming language frequently used to implement such a distributed system. A program written in the Java programming language is compiled into a platform-independent format, using a bytecode instruction set, which can be executed on any platform supporting the Java virtual machine (JVM). The JVM may be implemented on any type of platform, greatly increasing the ease with which heterogeneous machines can be federated into a distributed system.
The Jini™ architecture has been developed using the Java programming language to enable devices in a distributed system to share services using remote method invocation (RMI). Traditional Jini systems use RMI to enable a client device to request and receive a service provided by a server device on a remote machine. While conventional Jini systems provide a basic architecture for providing services in a distributed system, they do not provide tools specifically directed to providing complex services. Current systems do not address provisioning a service, such as application software, to make it available to the distributed system in the first place. Furthermore, conventional systems do not consider the requirements of a specific service before provisioning the service to make it available in the distributed system.
For example, one such distributed system may include reader devices using Radio Frequency Identification (RFID) technology, and services that receive and process identification data from the reader devices and synthesize the processed data into meaningful business data. Although RFID technology is well known, conventional RFID systems do not operate satisfactorily in a distributed system, where network changes, such as the failure of a computer resource or the introduction of a new resource, are common. Furthermore, conventional RFID systems do not discover reader devices dynamically. It is therefore desirable to provide RFID systems that operate in a distributed, robust, reliable, scalable manner.